
#include "time_n_date.h"


Time ParseTime(string s)
/*Mengkonversi string dengan format hh:mm:ss 
ke tipe bentukan time */
{
	//kamus
	Time T;
	//Algoritma
	sscanf(s.s, "%d:%d:%d", &(T.h), &(T.m), &(T.s));
	return T;
}

Date ParseDate(string s)
/*Mengkonversi string dengan format dd-mm-yy
ke tipe bentukan date */
{
	//kamus
	Date D;
	//Algoritma
	sscanf(s.s, "%d-%d-%d", &(D.d), &(D.m), &(D.y));
	return D;
}

string DateToString(Date d)
/*Mengubah tipe bentukan date ke tipe string dengan format dd-mm-yy */
{
	//kamus
	string s;
	//algoritma
	sprintf (s.s, "%d-%d-%d", (d.d), (d.m), (d.y));
	s.length = 8;
	return s;
}

string TimeToString(Time t)
/* Mengubah tipe bentukan Time ke string dengan format hh:mm:ss */
{
	//kamus
	string s;
	//algoritma
	sprintf (s.s, "%02d:%02d:%02d", (t.h), (t.m), (t.s));
	s.length = 8;
	return s;
}

//--------------
//  RELASIONAL

boolean IsDateLt(Date d1 , Date d2)
/*Mengecek apakah tanggal d1 sebelum d2*/
{
	//kamus
	
	//Algoritma
	return ((d1.y < d2.y) || (( d1.y == d2.y) && (d1.m < d2.m)) || (( d1.y == d2.y) && (d1.m == d2.m) && (d1.d<d2.d)));
}

boolean IsDateGt(Date d1 , Date d2)
/*Mengecek apakah tanggal d1 sesudah d2*/
{
	//kamus
	
	//algoritma
	return ((d1.y > d2.y) || (( d1.y == d2.y) && (d1.m > d2.m)) || (( d1.y == d2.y) && (d1.m == d2.m) && (d1.d>d2.d)));
}

boolean IsDateEq(Date d1 , Date d2)
/*Mengecek apakah tanggal d1 sama dengan d2*/
{
	//kamus
	
	//algoritma
	return ((d1.y == d2.y) && (d1.m == d2.m) && (d1.d ==d2.d));
}

boolean IsTimeLt(Time t1 , Time t2)
/*Mengecek apakah t1 sebelum t2*/
{
	//kamus
	
	//algoritma
	return ((t1.h < t2.h) ||((t1.h == t2.h)&&(t1.m < t2.m)) || ((t1.h == t2.h)&&(t1.m == t2.m)&&(t1.s <t2.s))); 
}
boolean IsTimeGt(Time t1 , Time t2)
/*Mengecek apakah t1 sesudah t2*/
{
	//kamus
	
	//algoritma
	return ((t1.h > t2.h) ||((t1.h == t2.h)&&(t1.m > t2.m)) || ((t1.h == t2.h)&&(t1.m == t2.m)&&(t1.s >t2.s))); 
}

boolean IsTimeEq(Time t1 , Time t2)
/*Mengecek apakah t1 sama dengan t2 */
{
	//kamus
	
	//algoritma
	return ((t1.h == t2.h)&&(t1.m == t2.m)&&(t1.s ==t2.s));
}

//--------------
//  Pengambilan Date & Time dari sistem

Date GetCurrentDate()
/*Mengembalikan tanggal sistem saat fungsi ini dipanggil */
{	
	time_t rawtime;
	string s;

	struct tm * timeinfo;

	time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	
	strftime (s.s,100,"%d-%m-%04Y",timeinfo);
	s.length=10;	
	return ParseDate(s);
}

Time GetCurrentTime()
/*Mengembalikan waktu sistem saat fungsi ini dipanggil */
{
	time_t rawtime;
	struct tm * timeinfo;
	char temp [100];
	string s;

	time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	
	strftime (s.s,100,"%H:%M:%S",timeinfo);
	s.length=8;
	//printf("time dapat %s\n", s.s);
	
	return ParseTime(s);

}
